/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.sgc.dto;

import com.brain.conf.dto.MonedaDto;
import com.brain.cont.dto.ContratoDto;
import com.brain.core.dto.ArchivoDto;
import com.brain.core.dto.EmpresaDto;
import com.brain.core.dto.ParametroDto;
import com.brain.core.dto.UbigeoDto;
import com.brain.desa.dto.EvaluacionCompetenciaDto;
import com.brain.desa.dto.EvaluacionDesempenoDto;
import com.brain.plan.dto.AfpDto;
import com.brain.segu.dto.UsuarioDto;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.validation.constraints.Size;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

/**
 *
 * @author Hvives
 */
@Entity
@Table(name = "TSGC_PERSONA")
public class PersonaDto implements Serializable {

    private static final long serialVersionUID = 1L;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "SEQ_PERSONA")
    @TableGenerator(name = "SEQ_PERSONA", table = "TCORE_ENTIDAD", pkColumnName = "NOMBRE", valueColumnName = "CORRELATIVO", pkColumnValue = "TSGC_PERSONA", allocationSize = 1)
    private Long id;
    @JoinColumn(name = "EMPRESA", referencedColumnName = "ID")
    @ManyToOne
    private EmpresaDto empresaDto;
    @Size(max = 30)
    @Column(name = "PRIMER_NOMBRE")
    private String primerNombre;
    @Size(max = 30)
    @Column(name = "SEGUNDO_NOMBRE")
    private String segundoNombre;
    @Size(max = 30)
    @Column(name = "APELLIDO_PATERNO")
    private String apellidoPaterno;
    @Size(max = 30)
    @Column(name = "APELLIDO_MATERNO")
    private String apellidoMaterno;
    @JoinColumn(name = "TIPO_DOCUMENTO", referencedColumnName = "ID")
    @ManyToOne
    private ParametroDto tipoDocumentoDto;
    @Size(max = 30)
    @Column(name = "NUMERO_DOCUMENTO")
    private String numeroDocumento;
    @Column(name = "FECHA")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fecha;
    @Size(max = 100)
    @Column(name = "TERMINAL")
    private String terminal;
    @Size(max = 500)
    @Column(name = "INLINESTYLE")
    private String inlinestyle;
    @Size(max = 1000)
    @Column(name = "COMENTARIO")
    private String comentario;
    @JoinColumn(name = "ESTADO", referencedColumnName = "ID")
    @ManyToOne
    private ParametroDto estadoDto;
    @Column(name = "USUARIO")
    private Long usuario;
    @Column(name = "FECHA_CREACION")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaCreacion;
    @Column(name = "USUARIO_CREACION")
    private Long usuarioCreacion;
    @Size(max = 100)
    @Column(name = "TERMINAL_CREACION")
    private String terminalCreacion;
    // @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="Invalid email")//if the field contains email address consider using this annotation to enforce field validation
    @Size(max = 30)
    @Column(name = "EMAIL")
    private String email;
    @Size(max = 20)
    @Column(name = "TELEFONO_CELULAR")
    private String telefonoCelular;
    @Size(max = 20)
    @Column(name = "TELEFONO_FIJO")
    private String telefonoFijo;
    @JoinColumn(name = "NACIONALIDAD", referencedColumnName = "ID")
    @ManyToOne
    private UbigeoDto nacionalidadDto;
    @Column(name = "FECHA_NACIMIENTO")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaNacimiento;
    @JoinColumn(name = "SEXO", referencedColumnName = "ID")
    @ManyToOne
    private ParametroDto sexoDto;
    @JoinColumn(name = "ESTADO_CIVIL", referencedColumnName = "ID")
    @ManyToOne
    private ParametroDto estadoCivilDto;
    @Column(name = "SALARIO_EXPEC")
    private BigDecimal salarioExpec;
    @Size(max = 1000)
    @Column(name = "BIOGRAFIA")
    private String biografia;
    @Size(max = 200)
    @Column(name = "NOMBRE_COMPLETO")
    private String nombreCompleto;
    @JoinColumn(name = "TIPO_MONEDA", referencedColumnName = "ID")
    @ManyToOne
    private MonedaDto tipoMonedaDto;
    @JoinColumn(name = "PUESTO", referencedColumnName = "ID")
    @ManyToOne
    private PuestoDto puestoDto;
    @JoinColumn(name = "SEDE", referencedColumnName = "ID")
    @ManyToOne
    private ParametroDto sedeDto;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "personaDto", fetch = FetchType.LAZY)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<EstudioDto> listaEstudios;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "personaDto", fetch = FetchType.LAZY)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<IdiomaDto> listaIdiomas;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "personaDto", fetch = FetchType.LAZY)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<ConocimientoInformaticaDto> listaConocInformatica;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "personaDto", fetch = FetchType.LAZY)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<ConocimientoAdicionalDto> listaConocAdicional;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "personaDto", fetch = FetchType.LAZY)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<ExperienciaDto> listaExperiencias;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "personaDto", fetch = FetchType.LAZY)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<ReferenciaDto> listaReferencias;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "personaDto", fetch = FetchType.LAZY)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<AmonestacionDto> listaAmonestacion;
    @JoinColumn(name = "PROFESION_PRINCIPAL", referencedColumnName = "ID")
    @ManyToOne
    private ParametroDto profPrincipalDto;
    @JoinColumn(name = "CONTRATO_VIGENTE", referencedColumnName = "ID")
    @ManyToOne
    private ContratoDto contVigenteDto;
    @Column(name = "CUSPP")
    private String cuspp;
    @JoinColumn(name = "SIST_PENSIONES", referencedColumnName = "ID")
    @ManyToOne
    private ParametroDto sistPensionesDto;
    @JoinColumn(name = "AFP", referencedColumnName = "ID")
    @ManyToOne
    private AfpDto afpDto;
    @Column(name = "EMP")
    private Boolean emp;
    @Column(name = "EVA_COMPETENCIA")
    private BigDecimal evCompetencia;
    @Column(name = "EVA_DESEMPENO")
    private BigDecimal evDesempeno;
    @Column(name = "PROMEDIO_FINAL")
    private BigDecimal promedioFinal;
    @Column(name = "CUADRANTE")
    private String cuadrante;
    @Column(name = "GT")
    private Long gt;
    @JoinColumn(name = "EVA_DESEMPENO_ID", referencedColumnName = "ID")
    @ManyToOne
    private EvaluacionDesempenoDto evDesempenoDto;
    @JoinColumn(name = "EVA_COMPETENCIA_ID", referencedColumnName = "ID")
    @ManyToOne
    private EvaluacionCompetenciaDto evCompetenciaDto;
    @Transient
    private String campoBusqueda;
    @JoinColumn(name = "USUARIO_SISTEMA", referencedColumnName = "ID")
    @ManyToOne
    private UsuarioDto usuarioSistemaDto;
    @Transient
    private String isEmpleado;
    @JoinColumn(name = "ARCHIVO_FOTO", referencedColumnName = "ID")
    @ManyToOne
    private ArchivoDto archivoFotoDto;
    //Campos agregados para planillas
    @Column(name = "ESSALUD_VIDA")
    private Boolean esSaludVida;
    @JoinColumn(name = "CENT_RIESGO", referencedColumnName = "ID")
    @ManyToOne
    private ParametroDto cenRiesgoDto;
    @JoinColumn(name = "TASA", referencedColumnName = "ID")
    @ManyToOne
    private ParametroDto tasaDto;
    @JoinColumn(name = "TIPO_RIESGO", referencedColumnName = "ID")
    @ManyToOne
    private ParametroDto tipoRiesgoDto;
    @Column(name = "REGIMEN_PENSIONARIO")
    private String regimen;
    @JoinColumn(name = "BANCO_PAGO", referencedColumnName = "ID")
    @ManyToOne
    private ParametroDto bancoPagoDto;
    @JoinColumn(name = "TIPO_CUENTA_PAGO", referencedColumnName = "ID")
    @ManyToOne
    private ParametroDto tipoCuentaPagoDto;
    @Column(name = "NUM_CUENTA_PAGO")
    private String numCuentaPago;
    @JoinColumn(name = "BANCO_CTS", referencedColumnName = "ID")
    @ManyToOne
    private ParametroDto bancoCtsDto;
    @Column(name = "NUM_CUENTA_CTS")
    private String numCuentaCts;
    @Column(name = "NUM_ESSALUD")
    private String numEsSalud;
    @Column(name = "FECHA_SUSC_AFP")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fecSusAfp;
    @Column(name = "TIPO_COMISION")
    private String tipoComision;

    public PersonaDto() {
    }

    public PersonaDto(Long id) {
        this.id = id;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getPrimerNombre() {
        return primerNombre;
    }

    public void setPrimerNombre(String primerNombre) {
        this.primerNombre = primerNombre;
    }

    public String getSegundoNombre() {
        return segundoNombre;
    }

    public void setSegundoNombre(String segundoNombre) {
        this.segundoNombre = segundoNombre;
    }

    public String getApellidoPaterno() {
        return apellidoPaterno;
    }

    public void setApellidoPaterno(String apellidoPaterno) {
        this.apellidoPaterno = apellidoPaterno;
    }

    public String getApellidoMaterno() {
        return apellidoMaterno;
    }

    public void setApellidoMaterno(String apellidoMaterno) {
        this.apellidoMaterno = apellidoMaterno;
    }

    public ParametroDto getTipoDocumentoDto() {
        return tipoDocumentoDto;
    }

    public void setTipoDocumentoDto(ParametroDto tipoDocumentoDto) {
        this.tipoDocumentoDto = tipoDocumentoDto;
    }

    public String getNumeroDocumento() {
        return numeroDocumento;
    }

    public void setNumeroDocumento(String numeroDocumento) {
        this.numeroDocumento = numeroDocumento;
    }

    public Date getFecha() {
        return fecha;
    }

    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

    public String getTerminal() {
        return terminal;
    }

    public void setTerminal(String terminal) {
        this.terminal = terminal;
    }

    public String getInlinestyle() {
        return inlinestyle;
    }

    public void setInlinestyle(String inlinestyle) {
        this.inlinestyle = inlinestyle;
    }

    public String getComentario() {
        return comentario;
    }

    public void setComentario(String comentario) {
        this.comentario = comentario;
    }

    public ParametroDto getEstadoDto() {
        return estadoDto;
    }

    public void setEstadoDto(ParametroDto estadoDto) {
        this.estadoDto = estadoDto;
    }

    public Long getUsuario() {
        return usuario;
    }

    public void setUsuario(Long usuario) {
        this.usuario = usuario;
    }

    public Date getFechaCreacion() {
        return fechaCreacion;
    }

    public void setFechaCreacion(Date fechaCreacion) {
        this.fechaCreacion = fechaCreacion;
    }

    public Long getUsuarioCreacion() {
        return usuarioCreacion;
    }

    public void setUsuarioCreacion(Long usuarioCreacion) {
        this.usuarioCreacion = usuarioCreacion;
    }

    public String getTerminalCreacion() {
        return terminalCreacion;
    }

    public void setTerminalCreacion(String terminalCreacion) {
        this.terminalCreacion = terminalCreacion;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getTelefonoCelular() {
        return telefonoCelular;
    }

    public void setTelefonoCelular(String telefonoCelular) {
        this.telefonoCelular = telefonoCelular;
    }

    public String getTelefonoFijo() {
        return telefonoFijo;
    }

    public void setTelefonoFijo(String telefonoFijo) {
        this.telefonoFijo = telefonoFijo;
    }

    public UbigeoDto getNacionalidadDto() {
        return nacionalidadDto;
    }

    public void setNacionalidadDto(UbigeoDto nacionalidadDto) {
        this.nacionalidadDto = nacionalidadDto;
    }

    public Date getFechaNacimiento() {
        return fechaNacimiento;
    }

    public void setFechaNacimiento(Date fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }

    public ParametroDto getSexoDto() {
        return sexoDto;
    }

    public void setSexoDto(ParametroDto sexoDto) {
        this.sexoDto = sexoDto;
    }

    public ParametroDto getEstadoCivilDto() {
        return estadoCivilDto;
    }

    public void setEstadoCivilDto(ParametroDto estadoCivilDto) {
        this.estadoCivilDto = estadoCivilDto;
    }

    public BigDecimal getSalarioExpec() {
        return salarioExpec;
    }

    public void setSalarioExpec(BigDecimal salarioExpec) {
        this.salarioExpec = salarioExpec;
    }

    public String getBiografia() {
        return biografia;
    }

    public void setBiografia(String biografia) {
        this.biografia = biografia;
    }

    public MonedaDto getTipoMonedaDto() {
        return tipoMonedaDto;
    }

    public void setTipoMonedaDto(MonedaDto tipoMonedaDto) {
        this.tipoMonedaDto = tipoMonedaDto;
    }

    public String getNombreCompleto() {
        return nombreCompleto;
    }

    public void setNombreCompleto(String nombreCompleto) {
        this.nombreCompleto = nombreCompleto;
    }

    public List<EstudioDto> getListaEstudios() {
        return listaEstudios;
    }

    public void setListaEstudios(List<EstudioDto> listaEstudios) {
        this.listaEstudios = listaEstudios;
    }

    public ParametroDto getProfPrincipalDto() {
        return profPrincipalDto;
    }

    public void setProfPrincipalDto(ParametroDto profPrincipalDto) {
        this.profPrincipalDto = profPrincipalDto;
    }

    public ContratoDto getContVigenteDto() {
        return contVigenteDto;
    }

    public void setContVigenteDto(ContratoDto contVigenteDto) {
        this.contVigenteDto = contVigenteDto;
    }

    public String getCuspp() {
        return cuspp;
    }

    public void setCuspp(String cuspp) {
        this.cuspp = cuspp;
    }

    public ParametroDto getSistPensionesDto() {
        return sistPensionesDto;
    }

    public void setSistPensionesDto(ParametroDto sistPensionesDto) {
        this.sistPensionesDto = sistPensionesDto;
    }

    public AfpDto getAfpDto() {
        return afpDto;
    }

    public void setAfpDto(AfpDto afpDto) {
        this.afpDto = afpDto;
    }

    public Boolean getEmp() {
        return emp;
    }

    public void setEmp(Boolean emp) {
        this.emp = emp;
    }

    public List<IdiomaDto> getListaIdiomas() {
        return listaIdiomas;
    }

    public void setListaIdiomas(List<IdiomaDto> listaIdiomas) {
        this.listaIdiomas = listaIdiomas;
    }

    public List<ConocimientoInformaticaDto> getListaConocInformatica() {
        return listaConocInformatica;
    }

    public void setListaConocInformatica(List<ConocimientoInformaticaDto> listaConocInformatica) {
        this.listaConocInformatica = listaConocInformatica;
    }

    public List<ConocimientoAdicionalDto> getListaConocAdicional() {
        return listaConocAdicional;
    }

    public void setListaConocAdicional(List<ConocimientoAdicionalDto> listaConocAdicional) {
        this.listaConocAdicional = listaConocAdicional;
    }

    public List<ExperienciaDto> getListaExperiencias() {
        return listaExperiencias;
    }

    public void setListaExperiencias(List<ExperienciaDto> listaExperiencias) {
        this.listaExperiencias = listaExperiencias;
    }

    public List<ReferenciaDto> getListaReferencias() {
        return listaReferencias;
    }

    public void setListaReferencias(List<ReferenciaDto> listaReferencias) {
        this.listaReferencias = listaReferencias;
    }

    public String getCampoBusqueda() {
        return campoBusqueda;
    }

    public void setCampoBusqueda(String campoBusqueda) {
        this.campoBusqueda = campoBusqueda;
    }

    public PuestoDto getPuestoDto() {
        return puestoDto;
    }

    public void setPuestoDto(PuestoDto puestoDto) {
        this.puestoDto = puestoDto;
    }

    public ParametroDto getSedeDto() {
        return sedeDto;
    }

    public void setSedeDto(ParametroDto sedeDto) {
        this.sedeDto = sedeDto;
    }

    public BigDecimal getEvCompetencia() {
        return evCompetencia;
    }

    public void setEvCompetencia(BigDecimal evCompetencia) {
        this.evCompetencia = evCompetencia;
    }

    public BigDecimal getEvDesempeno() {
        return evDesempeno;
    }

    public void setEvDesempeno(BigDecimal evDesempeno) {
        this.evDesempeno = evDesempeno;
    }

    public BigDecimal getPromedioFinal() {
        return promedioFinal;
    }

    public void setPromedioFinal(BigDecimal promedioFinal) {
        this.promedioFinal = promedioFinal;
    }

    public String getCuadrante() {
        return cuadrante;
    }

    public void setCuadrante(String cuadrante) {
        this.cuadrante = cuadrante;
    }

    public Long getGt() {
        return gt;
    }

    public void setGt(Long gt) {
        this.gt = gt;
    }

    public EvaluacionDesempenoDto getEvDesempenoDto() {
        return evDesempenoDto;
    }

    public void setEvDesempenoDto(EvaluacionDesempenoDto evDesempenoDto) {
        this.evDesempenoDto = evDesempenoDto;
    }

    public EvaluacionCompetenciaDto getEvCompetenciaDto() {
        return evCompetenciaDto;
    }

    public void setEvCompetenciaDto(EvaluacionCompetenciaDto evCompetenciaDto) {
        this.evCompetenciaDto = evCompetenciaDto;
    }

    public UsuarioDto getUsuarioSistemaDto() {
        return usuarioSistemaDto;
    }

    public void setUsuarioSistemaDto(UsuarioDto usuarioSistemaDto) {
        this.usuarioSistemaDto = usuarioSistemaDto;
    }

    public List<AmonestacionDto> getListaAmonestacion() {
        return listaAmonestacion;
    }

    public void setListaAmonestacion(List<AmonestacionDto> listaAmonestacion) {
        this.listaAmonestacion = listaAmonestacion;
    }

    public String getIsEmpleado() {
        if (emp) {
            isEmpleado = "SI";
        } else {
            isEmpleado = "NO";
        }
        return isEmpleado;
    }

    public void setIsEmpleado(String isEmpleado) {
        this.isEmpleado = isEmpleado;
    }

    public EmpresaDto getEmpresaDto() {
        return empresaDto;
    }

    public void setEmpresaDto(EmpresaDto empresaDto) {
        this.empresaDto = empresaDto;
    }

    public ArchivoDto getArchivoFotoDto() {
        return archivoFotoDto;
    }

    public void setArchivoFotoDto(ArchivoDto archivoFotoDto) {
        this.archivoFotoDto = archivoFotoDto;
    }

    public Boolean getEsSaludVida() {
        return esSaludVida;
    }

    public void setEsSaludVida(Boolean esSaludVida) {
        this.esSaludVida = esSaludVida;
    }

    public ParametroDto getCenRiesgoDto() {
        return cenRiesgoDto;
    }

    public void setCenRiesgoDto(ParametroDto cenRiesgoDto) {
        this.cenRiesgoDto = cenRiesgoDto;
    }

    public ParametroDto getTasaDto() {
        return tasaDto;
    }

    public void setTasaDto(ParametroDto tasaDto) {
        this.tasaDto = tasaDto;
    }

    public ParametroDto getTipoRiesgoDto() {
        return tipoRiesgoDto;
    }

    public void setTipoRiesgoDto(ParametroDto tipoRiesgoDto) {
        this.tipoRiesgoDto = tipoRiesgoDto;
    }

    public String getRegimen() {
        return regimen;
    }

    public void setRegimen(String regimen) {
        this.regimen = regimen;
    }

    public ParametroDto getBancoPagoDto() {
        return bancoPagoDto;
    }

    public void setBancoPagoDto(ParametroDto bancoPagoDto) {
        this.bancoPagoDto = bancoPagoDto;
    }

    public ParametroDto getTipoCuentaPagoDto() {
        return tipoCuentaPagoDto;
    }

    public void setTipoCuentaPagoDto(ParametroDto tipoCuentaPagoDto) {
        this.tipoCuentaPagoDto = tipoCuentaPagoDto;
    }

    public String getNumCuentaPago() {
        return numCuentaPago;
    }

    public void setNumCuentaPago(String numCuentaPago) {
        this.numCuentaPago = numCuentaPago;
    }

    public ParametroDto getBancoCtsDto() {
        return bancoCtsDto;
    }

    public void setBancoCtsDto(ParametroDto bancoCtsDto) {
        this.bancoCtsDto = bancoCtsDto;
    }

    public String getNumCuentaCts() {
        return numCuentaCts;
    }

    public void setNumCuentaCts(String numCuentaCts) {
        this.numCuentaCts = numCuentaCts;
    }

    public String getNumEsSalud() {
        return numEsSalud;
    }

    public void setNumEsSalud(String numEsSalud) {
        this.numEsSalud = numEsSalud;
    }

    public Date getFecSusAfp() {
        return fecSusAfp;
    }

    public void setFecSusAfp(Date fecSusAfp) {
        this.fecSusAfp = fecSusAfp;
    }

    public String getTipoComision() {
        return tipoComision;
    }

    public void setTipoComision(String tipoComision) {
        this.tipoComision = tipoComision;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof PersonaDto)) {
            return false;
        }
        PersonaDto other = (PersonaDto) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.brain.sgc.dto.PersonaDto[ id=" + id + " ]";
    }
}